package notes.java.concurrent;

import java.util.LinkedList;
import java.util.Queue;
import java.util.concurrent.locks.LockSupport;

/** 生产者，消费者实现 LockSupport */
public class U17_TestLockSupport2 {

	// 最大生产数量
	private static int MAX_NUM = 10;
	// 消费到此数时，停止消费
	private static int MIN_NUM = 0;
	// 容器
	private static Queue<String> queue = new LinkedList<>();

	// 生产者
	static Thread producer = null;
	// 消费者
	static Thread consumer = null;

	public static void main(String[] args) {

		producer = new Thread(() -> {
			while (true) {
				while (queue.size() >= MAX_NUM) {
					LockSupport.unpark(consumer);// 叫醒消费者，一定要先叫醒，不然阻塞了，后面代码无法执行
					LockSupport.park();// 阻塞当前线程
				}
				queue.add("商品");
				System.out.println("生產一個商品。。。queue size:" + queue.size());
			}
		});

		consumer = new Thread(() -> {
			while (true) {
				while (queue.size() <= MIN_NUM) {
					LockSupport.unpark(producer);// 叫醒生产者，一定要先叫醒，不然阻塞了，后面代码无法执行
					LockSupport.park();// 阻塞当前线程
				}
				queue.poll();
				System.out.println("消費一個商品。。。queue size:" + queue.size());
			}
		});

		producer.start();
		consumer.start();
	}
}